package websocket

import "sync"

type Hub struct {
	userConnManger sync.Map
}

func NewHub() *Hub {
	return &Hub{userConnManger: sync.Map{}}
}

func (h *Hub) Join(conn *UserConn) {
	connManager, ok := h.userConnManger.Load(conn.UserId)
	if !ok {
		connManager = newUserConnManager(conn.UserId)
		h.userConnManger.Store(conn.UserId, connManager)
	}
	connManager.(*userConnManager).AddConn(conn)
}

func (h *Hub) Leave(conn *UserConn) {
	connManager, ok := h.userConnManger.Load(conn.UserId)
	if !ok {
		return
	}
	connManager.(*userConnManager).DelConn(conn.ConnId)
	if connManager.(*userConnManager).ConnCount() == 0 {
		h.userConnManger.Delete(conn.UserId)
	}
}

func (h *Hub) SendToUser(UserId string, msg []byte) {
	connManager, ok := h.userConnManger.Load(UserId)
	if ok {
		connManager.(*userConnManager).SendAll(msg)
		return
	}
}
